%% \chapter*{Introduction}\label{chap:Intro}
%% C'est dans le cadre du module \textsc{SC Project} que nous avons été amenés à effectuer le projet \textit{"Mise en place de générateurs pour des applications web"}. Nous avons porté notre choix sur ce sujet pour sa contribution dans l'approche \href{http://fr.wikipedia.org/wiki/Model_driven_architecture}{MDA}\footnote{Model Driven Architecture.} dans un contexte industriel. 
%% Ce projet s'articule autour de la problématique suivante:
%% \begin {center}
%% \textit{"Comment pouvons-nous mettre en place des générateurs de code pour des applications web?"}
%% \end{center}
%% Pour vous décrire le déroulement du projet et répondre à cette problématique, notre rapport est scindé en cinq grandes parties. Nous allons, dans un premier temps, présenter l'entreprise \kwobeo{} pour laquelle nous avons réalisé ce projet, pour dans, un second temps, annoncer les objectifs que nous nous sommes fixés au préalable et la démarche mise en oeuvre pour les réaliser. Nous parlons ensuite de la méthodologie qui nous a été proposée par S.\textsc{Thibaudeau} puis des différents travaux que nous avons mis en place. Nous concluons ce rapport, par un bilan sur les travaux réalisés mais aussi les problèmes persistants.


\chapter{L'entreprise Obeo}
\section{Présentation de l'entreprise}
\kwobeo{} est une société de services, un éditeur de logiciels et un créateur d'outils innovants pour la mise au point d'usines de logiciels\cite{obeo}.  Elle est fondée en 2005 dans la région nantaise par l'initiative de S.\textsc{Lacrampe} (directeur général), E.\textsc{Juliot} (directeur commercial) et J.\textsc{Musset} (ancien directeur technique). En décembre 2007, une agence est ouverte à Gif-sur-Yvette (région parisienne). Elle est à l'initiative du projet \kwacceleo{} (\cf{} section \ref{sec:acc}), un générateur de code basé sur le framework EMF. Son expertise dans le domaine de l'ingénierie des modèles (démarche MDA) lui permet de proposer des solutions allant de la création à la refonte d'applications informatiques. 
\begin{figure}[htb]
  \centering
  \includegraphics[scale=.45]{img/logoobeo.eps}
  \caption{L'entreprise Obeo}
\end{figure}


Les solutions proposées permettent notamment de diminuer les délais de projets et de diminuer les risques d'erreurs. Ces offres uniques sur le marché ont convaincu des clients tels que Thales, CEA, Atos Origin ou encore Orange Business Services. Les utilisateurs des produits proposés par \kwobeo sont majoritairement des chefs de projet, des architectes logiciel ou encore des développeurs.
La société \kwobeo{} est aussi un membre actif dans le domaine Open Source et est membre \emph{stratégique} de la fondation Eclipse \cite{fondation}.

\clearpage

\section{Spécification M2T}\label{sec:m2t}

Dans le cadre du développement à base de modèles, l'Object Management Group \cite{omg} a créé la spécification Meta-Object Facility Model to Text Transformation Language (ou \textit{MOF2Text}). La société \kwobeo{} emploie ce langage qui est au coeur de son projet \kwacceleo{} (\cf{} \ref{sec:acc}).

\begin{figure}[htb]
  \centering
  \includegraphics[scale=.6]{img/omg.eps}
  \caption{Object Management Group}
  \label{fig:omg}
\end{figure}


Le principe du Model To Text est d'obtenir du texte (principalement du code source) à partir de simple modèles.
Il repose sur au moins trois notions essentielles :
\begin{itemize}
\item Le Méta-Modèle (ou M2) : Le M2 sert à définir les différents concepts pouvant entrer en jeu au sein du système, ainsi que les relations que ces concepts entretiennent entre-eux. Le M2 sert donc de base à la modélisation.
\item Le Modèle (ou M1) : Il repose sur le M2 pour décrire un système (ou une facette d'un système) en organisant les différents éléments entre eux de manière concrète, et en leur assignant un certain nombre de propriétés. Ainsi, le Modèle est utilisé pour fournir une description non-technique du réel et/ou de l'application attendue.
\item Le générateur de code : Il est utilisé pour \guim{traduire} un Modèle en code exécutable. Utilisant la plupart du temps un système basé sur les templates, il est configuré pour générer certaines portions de code en fonction des éléments rencontrés en parcourant le Modèle. Le générateur de code est donc utilisé pour passer d'un Modèle non-technique à une application exécutable sur la plate-forme et/ou l'environnement cible. L'objectif étant qu'un même générateur de code soit capable de produire des applications différentes à partir de Modèles différents (reposant sur le même M2).\\
\end{itemize}

Le Modèle permet donc de représenter une application et son contexte en faisant abstraction de la technologie ou de la plate-forme cible, à l'inverse du générateur qui doit savoir produire une solution technique en faisant abstraction du contexte concrêt, qui est fourni par le modèle.

% TODO Un schema pourrait etre intressant.



%%  LocalWords:  Obeo MDA \kwacceleo{} SC Project web Model Driven Juliot
%%  LocalWords:  pouvons-nous Thibaudeau nantaise Lacrampe Musset EMF
%%  LocalWords:  Gif-sur-Yvette framework Thales CEA Atos Origin to
%%  LocalWords:  Eclipse l'Object Meta-Object Facility Text Language
%%  LocalWords:  MOF Object Méta-Modèle non-technique templates
